TensorBoard 是 Tensorflow 提供的視覺化工具,功能非常強大,除了可以顯示訓練的過程,也可以顯示圖片及語音。在訓練的過程中就可以啟動TensorBoard,即時觀看訓練資訊。PyTorch 安裝時也會包括 TensorBoardX,表示PyTorch 雖是競爭對手,但是,好東西也是要分享一下的。
上一篇使用 TensorBoard callback 寫入 TensorBoard Log,事實上,我們也可以直接使用程式寫入 Log,這部份的寫法,在 Tensorflow 1.x 版與 2.x 版有所差異,以下僅就 2.x 版作一詳細說明。
追蹤損失和準確率等效能衡量指標(Metrics),並以視覺化呈現。
顯示運算圖(Computational Graph):包括張量運算(tensor operation)和層(layers)。
直方圖(histogram):顯示訓練過程中的權重(weights)、偏差(bias)分佈。
詞嵌入展示:將詞嵌入(Word Embedding)投影至三維空間顯示。畫面右邊可輸入任意單字,例如 King,就會出現下圖,將相近字顯示出來,原理是透過詞向量(Word2Vec)將每個字轉為向量,再利用 Cosine_Similarity 計算相似性。
顯示圖片、文字和音訊資料。
剖析 TensorFlow 程式流程。
同樣拿 MNIST 辨識作測試,前面抓取資料與建立模型程序均未改變,以下僅說明關鍵的程式碼,完整的範例檔請參考08_01_TensorBoard.ipynb,。
# 設定優化器(optimizer)、損失函數(loss)、效能衡量指標(metrics)的類別
loss_object = tf.keras.losses.SparseCategoricalCrossentropy()
optimizer = tf.keras.optimizers.Adam()
# Define 訓練及測試的效能衡量指標(Metrics)
train_loss = tf.keras.metrics.Mean('train_loss', dtype=tf.float32)
train_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('train_accuracy')
test_loss = tf.keras.metrics.Mean('test_loss', dtype=tf.float32)
test_accuracy = tf.keras.metrics.SparseCategoricalAccuracy('test_accuracy')
def train_step(model, optimizer, x_train, y_train):
# 自動微分
with tf.GradientTape() as tape:
predictions = model(x_train, training=True)
loss = loss_object(y_train, predictions)
grads = tape.gradient(loss, model.trainable_variables)
optimizer.apply_gradients(zip(grads, model.trainable_variables))
# 計算訓練的效能衡量指標
train_loss(loss)
train_accuracy(y_train, predictions)
def test_step(model, x_test, y_test):
# 預測
predictions = model(x_test)
# 計算損失
loss = loss_object(y_test, predictions)
# 計算測試的效能衡量指標
test_loss(loss)
test_accuracy(y_test, predictions)
train_summary_writer = tf.summary.create_file_writer(train_log_dir)
test_summary_writer = tf.summary.create_file_writer(test_log_dir)
with train_summary_writer.as_default():
tf.summary.scalar('loss', train_loss.result(), step=epoch)
tf.summary.scalar('accuracy', train_accuracy.result(), step=epoch)
開啟cmd,啟動 Tensorboard,也可以在 jupyter notebook 啟動 Tensorboard,分兩步驟:
# 載入 TensorBoard notebook extension
%load_ext tensorboar
%tensorboard --logdir logs/gradient_tape
註: % 為jupyter notebook的魔術方法前置符號。
使用瀏覽器輸入以下網址,即可觀看訓練資訊:
http://localhost:6006/
示範如何將圖片寫入 Log,關鍵程式碼如下:
# 任意找一張圖片
img = x_train[0].numpy().reshape((-1, 28, 28, 1))
# 指定 log 檔名
logdir = ".\\logs\\train_data\\" + datetime.datetime.now().strftime("%Y%m%d-%H%M%S")
# Creates a file writer for the log directory.
file_writer = tf.summary.create_file_writer(logdir)
# Using the file writer, log the reshaped image.
with file_writer.as_default():
# 將圖片寫入 log 檔
tf.summary.image("Training data", img, step=0)
使用瀏覽器觀看圖片:
http://localhost:6006/
結果如下:
我們可以在圖片處理中,把每一層的輸出轉換為圖片,寫入 Log,就可以更瞭解神經網路的訓練過程,亦即所謂的【可解釋的AI】(Explainable AI, XAI)。
以上作了很簡單的實驗,如果需要更詳細的資訊,可以參考【官網】。下一篇我們繼續探討Tensorboard 其他強大的功能,Happy coding。
本篇範例包括08_01_TensorBoard.ipynb,可自【這裡】下載。